package com.sap.sap_mangers.service;

import com.sap.sap_mangers.Vo.MessageBoardVo.MessageBoardArticleVo;
import com.sap.sap_mangers.Vo.MessageBoardVo.MessageBoardCommentVo;
import com.sap.sap_mangers.dto.message_board.MessageBoardArticle;
import com.sap.sap_mangers.dto.message_board.MessageBoardPraise;
import com.sap.sap_mangers.until.SimpleJson;

import java.util.List;

/**
 * @author 谢添
 * 2022/8/19 16:17
 */
public interface MessageBoardService {
    /**
     * 创建一篇新留言板文章
     *
     * @param article 文章信息
     * @return 文章具体内容
     */
    SimpleJson createArticle(MessageBoardArticle article);

    /**
     * 修改留言板文章信息
     *
     * @param article 修改信息
     * @return 文章具体内容
     */
    SimpleJson updateArticle(MessageBoardArticle article);

    /**
     * 创建一条新评论
     *
     * @param commentVo 评论信息
     * @return 文章具体内容
     */
    SimpleJson createComment(MessageBoardCommentVo commentVo);

    /**
     * 通过文章id获得该文章的全部信息
     *
     * @param articleId 文章id
     * @param userId    用户id
     * @return 全部信息
     */
    MessageBoardArticleVo getMessageBoardArticleAllMessageByArticleId(Integer articleId, Integer userId);

    /**
     * 通过 文章id 和 评论id 删除评论信息
     *
     * @param commentVo 信息
     * @return 文章的全部信息
     */
    SimpleJson delComment(MessageBoardCommentVo commentVo);

    /**
     * 通过用户id获取用户的所有文章
     *
     * @param userId 用户id
     * @return 该用户的全部文章
     */
    SimpleJson getUserAllArticleByUserId(Integer userId);

    /**
     * 通过 用户id 和 文章id 删除文章
     *
     * @param articleId 用户id
     * @param userId    文章id
     */
    void delArticleByArticleIdAndUserId(Integer articleId, Integer userId);

    /**
     * 1. 从未点赞 --> 创建文章点赞
     * 2. 取消点赞 --> 修改点赞状态为 0
     * 3. 取消过点赞但又重新点赞 --> 修改点赞状态为 1
     *
     * @param articleId 文章id
     * @param userId    当前操作用户
     */
    Integer createOrUpdatePraiseStatus(Integer articleId, Integer userId);

    /**
     * 返回 0 说明 当前对当前文章是点赞状态 ，返回 1 说明 对当前文章是非点赞状态
     *
     * @param articleId 文章id
     * @param userId    用户id
     * @return 返回状态
     */
    Integer getPraiseStatusOfArticle(Integer articleId, Integer userId);

    /**
     * 返回两个值 ，第一个值是自己对该文章的点赞状态：0 代表 没点赞，1 代表 点赞
     * 第二个值是该文章的总点赞数量
     *
     * @param articleId 文章id
     * @param userId    当前用户id
     * @return 两个值
     */
    List<Integer> getPraiseStatusAndLenOfArticle(Integer articleId, Integer userId);

    /**
     * 查看该用户未查看的新文章的数量
     *
     * @param userId 用户id
     * @return 新文章数量
     */
    SimpleJson getNewNoViewArticleCounts(Integer userId);

    /**
     * 修改用户最后一次访问留言板的时间为当前时间
     *
     * @param userId 用户id
     */
    void updateViewBoardLastTime(Integer userId);

    /**
     * 修改用户最后一次访问留言板消息栏的时间为当前时间
     *
     * @param userId 用户id
     */
    void updateViewNewsLastTime(Integer userId);

    /**
     * 在按照时间排序的文章列表中获取到小于articleId的共limitNumber个数据
     *
     * @param articleId   文章id
     * @param limitNumber 限制数量
     * @return 数据
     */
    SimpleJson getArticlesForLimitNumberByArticleId(Integer articleId, Integer limitNumber);

    /**
     * 按 userId 查找最后时间
     *
     * @param userId 用户id
     * @return 返回时间
     */
    SimpleJson getLastTimeViewBoardAndNews(Integer userId);

    /**
     * 获取对于该userId的留言板消息栏的新消息的数量，新消息的概念等价于微信朋友圈（无是否为好友的区分）
     *
     * @param userId 用户id
     * @return 新消息数量
     */
    SimpleJson getNoViewNewsNumberForUser(Integer userId);

    /**
     * 获取留言板消息栏消息（已按时间排序）
     *
     * @param userId      用户id
     * @param limitNumber 限制返回的最多消息数量
     * @param newsId      返回比该id小的消息
     * @return 消息
     */
    SimpleJson getNewsForLimitNumber(Integer userId, Integer limitNumber, Integer newsId);

    /**
     * 获取某一篇文章的全部信息
     *
     * @param articleId 文章id
     * @return 全部信息
     */
    SimpleJson getArticleAllMessage(Integer articleId);

    /**
     * 将创建评论添加到通知给其他关联用户看
     *
     * @param messageBoardComment 信息
     */
    void commentNewToNotice(MessageBoardCommentVo messageBoardComment);

    /**
     * 将 点赞 添加到通知给其他关联用户看
     *
     * @param messageBoardPraise 信息
     */
    void praiseNewToNotice(MessageBoardPraise messageBoardPraise);

    /**
     * 通过 id 返回点赞信息
     *
     * @param praiseId 点赞id
     * @return 点赞信息
     */
    MessageBoardPraise getPraiseMessageByPraiseId(Integer praiseId);

    /**
     * 通过 id 返回评论信息
     *
     * @param commentId 评论id
     * @return 信息
     */
    MessageBoardCommentVo getCommentMessageByCommentId(Integer commentId);
}
